package DataStructureAndAlgorithm.CSP.Day05;
import java.util.*;
public class AcWing_3213 {
    static class pair implements Comparable<pair>{
        int num;
        int cnt;
        pair(int num,int cnt){
            this.num = num;
            this.cnt = cnt;
        }
        @Override
        public int compareTo(pair temp){
            if (this.cnt == temp.cnt){
                return this.num - temp.num;
            }else {
                return temp.cnt - this.cnt;
            }
        }
    }
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++){
            int temp = in.nextInt();
            if (map.containsKey(temp)){
                map.put(temp,map.get(temp) + 1);
            }else {
                map.put(temp,1);
            }
        }
        int size = map.size();
        pair[] res = new pair[size];
        int k = 0;
        for (Integer temp : map.keySet()){
            //System.out.print(temp+ " ");
            int values = map.get(temp);
            res[k++] = new pair(temp,values);
        }
        Arrays.sort(res);
        for (int i = 0; i < k; i++){
            System.out.println(res[i].num + " " + res[i].cnt);
        }
    }
}

/*
给定 n

个整数，请统计出每个整数出现的次数，按出现次数从多到少的顺序输出。
输入格式

输入的第一行包含一个整数 n

，表示给定数字的个数。

第二行包含 n

个整数，相邻的整数之间用一个空格分隔，表示所给定的整数。
输出格式

输出多行，每行包含两个整数，分别表示一个给定的整数和它出现的次数。

按出现次数递减的顺序输出。如果两个整数出现的次数一样多，则先输出值较小的，然后输出值较大的。
数据范围

1≤n≤1000
，
给出的数都是不超过 1000

的非负整数。
输入样例：

12
5 2 3 3 1 3 4 2 5 2 3 5

输出样例：

3 4
2 3
5 3
1 1
4 1

 */